///****************************************************************************
//**
//** Copyright (C) 2016 The Qt Company Ltd.
//** Contact: https://www.qt.io/licensing/
//**
//** This file is part of the QtCore module of the Qt Toolkit.
//**
//** $QT_BEGIN_LICENSE:BSD$
//** Commercial License Usage
//** Licensees holding valid commercial Qt licenses may use this file in
//** accordance with the commercial license agreement provided with the
//** Software or, alternatively, in accordance with the terms contained in
//** a written agreement between you and The Qt Company. For licensing terms
//** and conditions see https://www.qt.io/terms-conditions. For further
//** information use the contact form at https://www.qt.io/contact-us.
//**
//** BSD License Usage
//** Alternatively, you may use this file under the terms of the BSD license
//** as follows:
//**
//** "Redistribution and use in source and binary forms, with or without
//** modification, are permitted provided that the following conditions are
//** met:
//**   * Redistributions of source code must retain the above copyright
//**     notice, this list of conditions and the following disclaimer.
//**   * Redistributions in binary form must reproduce the above copyright
//**     notice, this list of conditions and the following disclaimer in
//**     the documentation and/or other materials provided with the
//**     distribution.
//**   * Neither the name of The Qt Company Ltd nor the names of its
//**     contributors may be used to endorse or promote products derived
//**     from this software without specific prior written permission.
//**
//**
//** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
//**
//** $QT_END_LICENSE$
//**
//****************************************************************************/
//
//#include "geometryengine.h"
//
//#include <QVector2D>
//#include <QVector3D>
//
//struct VertexData
//{
//	QVector3D position;
//	//QVector2D texCoord;
//};
//
////! [0]
//GeometryEngine::GeometryEngine()
//	: indexBuf(QOpenGLBuffer::IndexBuffer)
//{
//	initializeOpenGLFunctions();
//
//	// Generate 2 VBOs
//	arrayBuf.create();
//	indexBuf.create();
//
//	// Initializes cube geometry and transfers it to VBOs
//	initCubeGeometry();
//}
//
//GeometryEngine::~GeometryEngine()
//{
//	arrayBuf.destroy();
//	indexBuf.destroy();
//}
////! [0]
//
//void GeometryEngine::initCubeGeometry()
//{
//	VertexData vertices[] = {
//		{ QVector3D(0.5f, 0.87f, 0.0f) },			// v0
//		{ QVector3D(1.0f, 0.0f, 0.0f) },					// v1
//		{ QVector3D(0.5f, -0.87f, 0.0f) },			// v2
//		{ QVector3D(-0.5f, -0.87f, 0) },		// v3
//		{ QVector3D(-1.0f, 0.0f, 0.0f) },				// v4
//		{ QVector3D(-0.5f, 0.87f, 0.0f) },			// v5
//
//		{ QVector3D(0.5f, 0.87f, 1.0f) },			// v6
//		{ QVector3D(1.0f, 0.0f, 1.0f) },					// v7
//		{ QVector3D(0.5f, -0.87f, 1.0f) },			// v8
//		{ QVector3D(-0.5f, -0.87f, 1.0f) },		// v9
//		{ QVector3D(-1.0f, 0.0f, 1.0f) },				// v10
//		{ QVector3D(-0.5f, 0.87f, 1.0f) }			// v11
//	};
//
//	GLushort indices[] = {
//		0, 1, 6,
//		6, 7, 1,
//		1, 2, 7,
//		7, 8, 2,
//		2, 3, 8,
//		8, 9, 3,
//		3, 4, 9,
//		9, 10, 4,
//		4, 5, 10,
//		10, 11, 5,
//		5, 0, 11,
//		11, 6, 0
//	};
//
//	//! [1]
//		// Transfer vertex data to VBO 0
//	arrayBuf.bind();
//	arrayBuf.allocate(vertices, 12 * sizeof(VertexData));
//
//	// Transfer index data to VBO 1
//	indexBuf.bind();
//	indexBuf.allocate(indices, 36 * sizeof(GLushort));
//	//! [1]
//}
//
////! [2]
//void GeometryEngine::drawCubeGeometry(QOpenGLShaderProgram *program)
//{
//	// Tell OpenGL which VBOs to use
//	arrayBuf.bind();
//	indexBuf.bind();
//
//	// Offset for position
//	quintptr offset = 0;
//
//	// Tell OpenGL programmable pipeline how to locate vertex position data
//	int vertexLocation = program->attributeLocation("a_position");
//	program->enableAttributeArray(vertexLocation);
//	program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));
//
//	// Offset for texture coordinate
//	offset += sizeof(QVector3D);
//
//	// Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
//	int texcoordLocation = program->attributeLocation("a_texcoord");
//	program->enableAttributeArray(texcoordLocation);
//	program->setAttributeBuffer(texcoordLocation, GL_FLOAT, offset, 2, sizeof(VertexData));
//
//	// Draw cube geometry using indices from VBO 1
//	glDrawElements(GL_TRIANGLE_STRIP, 36, GL_UNSIGNED_SHORT, 0);
//}
////! [2]
